package com.yuw.db;

import java.sql.*;

public class TEstDriver {
    public static void main(String[] args) {
        // 数据库新增操作
        // dbTest03();
        //dbTest04();
        // 数据库删除
        dbTest05();
        System.out.println("=============");
        // 数据库查询操作
        dbTest();
        System.out.println("=========================");
        dbTest02();
    }

    /**
     * jdbc操作数据库--测试插入方法
     */
    public static void dbTest05() {

        // 创建数据库操作类的实例对象
        DBProvider dbProvider = new DBProvider();
        // 调用新增方法进行数据新增
        String strSql = "delete from stuinfo where stuName = ?";
        dbProvider.updateorinsertordelete(strSql, new Object[]{"王五"});
    }

    /**
     * jdbc操作数据库--测试插入方法
     */
    public static void dbTest04() {

        // 创建数据库操作类的实例对象
        DBProvider dbProvider = new DBProvider();
        // 调用新增方法进行数据新增
        String strSql = "insert into stuinfo(stuName,stuNum,stuSex,stuscore) VALUES(?,?,?,?)";
        dbProvider.updateorinsertordelete(strSql, new Object[]{"赵六", "10013", "男", 79});
    }

    /**
     * jdbc操作数据库
     */
    public static void dbTest03() {

        // 创建数据库操作类的实例对象
        DBProvider dbProvider = new DBProvider();
        // 调用新增方法进行数据新增
        dbProvider.test01("王五", "10012", "男", 99);
    }

    /**
     * jdbc操作数据库
     */
    public static void dbTest02() {

        // 创建数据库操作类的实例对象
        DBProvider dbProvider = new DBProvider();
        // 调用数据库操作类的方法，完成数据库查询操作
        // （4）准备数据库操作的SQL语句；
        String strSql = "select * from stuInfo";
        ResultSet resultSet = dbProvider.query(strSql);
        try {
            // （6）如果是查询操作的话，解析ResultSet结果集中的数据，进行相关业务逻辑处理；
            // resultset集合的遍历
            while (resultSet.next()) {
                System.out.println("显示查询结果集中第二列的值：" + resultSet.getObject(2));
            }
            System.out.println("再次从ResultSet中获取结果集：");
            resultSet.beforeFirst(); // 把游标的指针重置到ResultSet结果集开始的位置
            while (resultSet.next()) {
                System.out.println("显示查询结果集中第二列的值：" + resultSet.getObject(2));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * jdbc操作数据库
     */
    public static void dbTest() {

        // （1）加载数据库驱动；
        // 数据库连接串 -- 指明数据库连接的方式 【不同数据库连接串不一样】
        // 连接串中的 localhost 表示本机，也可以使用 127.0.0.1表示本机
        // 还可以使用数据库服务器在局域网中的服务器名，或者ip地址
        // Mysql 8.x
        String strURLMysql8 = "jdbc:mysql://localhost:3306/tjise202103?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong&allowPublicKeyRetrieval=true";
        // Mysql 5.x ？
        String strURLMysql5 = "jdbc:mysql://localhost:3306/tjise202103?useUnicode=true&characterEncoding=utf8";
        // Oracle
        String strURLOracle = "jdbc:oracle:thin:@localhost:1521:orcl"; // orcl 表示Oracle数据库安装的实例名，默认是orcl，如果不是默认，则改成自己的

        // 数据库的驱动类名
        // Mysql 8.x
        String strDriverClassNameMysql8 = "com.mysql.cj.jdbc.Driver";
        // Mysql 5.x
        String strDriverClassNameMysql5 = "com.mysql.jdbc.Driver";
        // Oracle
        String strDriverClassNameOracle = "oracle.jdbc.driver.OracleDriver";
        // 数据库用户名
        String strUserName = "root"; // 改成自己的
        // 数据库密码
        String strUserPsw = "root"; // 改成自己的
        try {
            // 加载数据库驱动类 -- 反射
            Class.forName(strDriverClassNameMysql8); // 需要根据数据库进行调换

            // （2）获取数据库连接对象 Connection；
            // 第一个参数是数据库连接串，需要根据数据库调换
            Connection connection = DriverManager.getConnection(strURLMysql8, strUserName, strUserPsw);
            // （3）通过数据库连接获取查询器对象 Statement或者PreparedStatement；
            Statement statement = connection.createStatement();
            // （4）准备数据库操作的SQL语句；
            String strSql = "select * from stuInfo";
            // （5）执行数据库操作SQL语句，获取查询结果集ResultSet或者是运行结果；
            ResultSet resultSet = statement.executeQuery(strSql);
            // （6）如果是查询操作的话，解析ResultSet结果集中的数据，进行相关业务逻辑处理；
            // resultset集合的遍历
            while (resultSet.next()) {
                System.out.println("显示查询结果集中第二列的值：" + resultSet.getObject(2));
            }

            System.out.println("再次从ResultSet中获取结果集：");
            // 关闭数据库连接 Connection，ResultSet就不能使用了
            // connection.close();
            resultSet.beforeFirst(); // 把游标的指针重置到ResultSet结果集开始的位置
            while (resultSet.next()) {
                System.out.println("显示查询结果集中第二列的值：" + resultSet.getObject(2));
            }

        } catch (Exception e) {
            e.printStackTrace();
        }


    }
}
